//
// Created by Zhangwj on 2023/9/27.
//

#include "ForStmtItemNode.h"

std::unique_ptr<ForStmtItemNode> ForStmtItemNode::ForStmtItemParser(Parser &parser) {
    // 'for' '(' [ForStmt] ';' [Cond] ';' [forStmt] ')' Stmt
    std::unique_ptr<ForStmtItemNode> forStmtItemNode = std::make_unique<ForStmtItemNode>();
    if (parser.getLexType(0) == LexType::FORTK) {
        parser.next();
    }
    if (parser.getLexType(0) == LexType::LPARENT) {
        parser.next();
    }
    if (parser.getLexType(0) != LexType::SEMICN) {
        //[ForStmt1]存在
        forStmtItemNode->ForStmt1 = ForStmtNode::ForStmtParser(parser);
    }
    if (parser.getLexType(0) == LexType::SEMICN) {
        parser.next();
    }
    if (parser.getLexType(0) != LexType::SEMICN) {
        //[Cond]存在
        forStmtItemNode->Cond = CondNode::CondParser(parser);
    }
    if (parser.getLexType(0) == LexType::SEMICN) {
        parser.next();
    }
    if (parser.getLexType(0) != LexType::RPARENT) {
        //[ForStmt3]存在
        forStmtItemNode->ForStmt3 = ForStmtNode::ForStmtParser(parser);
    }
    if (parser.getLexType(0) == LexType::RPARENT) {
        parser.next();
    }
    forStmtItemNode->Stmt = StmtNode::StmtParser(parser);
    return forStmtItemNode;
}
